package main;

import javafx.application.Application;
import javafx.event.EventHandler;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.control.MenuBar;
import javafx.scene.paint.Color;
import javafx.stage.Stage;
import javafx.stage.WindowEvent;
import model.FirmaNeuBearbModel;
import model.FirmenVerwModel;
import model.KontaktNeuBearbModel;
import model.KontaktVerwModel;
import model.Model;

import org.apache.log4j.Logger;
import org.apache.log4j.xml.DOMConfigurator;

import view.FirmaNeuBearb;
import view.FirmenVerw;
import view.Hauptfenster;
import view.KontaktNeuBearb;
import view.KontaktVerw;
import controler.Controler;
import datenbank.FirmenVerwDB;
import datenbank.KontaktVerwDB;

/**
 * Konstruktor
 * 
 * @author Schweingruber Roger
 * 
 */
public class Main extends Application {

	// logger
	private Logger logger = Logger.getLogger(getClass());

	private Scene scene;
	private MenuBar hauptfenster_fx;

	// Fenster Firma
	private FirmenVerw winFirmenVerw;
	private FirmaNeuBearb winNeueFirma;

	// Fenster Kontakt
	private KontaktVerw winKontaktVerw;
	private KontaktNeuBearb winkontaktNeuBearb;

	// Models Allgemein
	private Model model;

	// Model Firma
	private FirmenVerwModel firmenVerwModel;
	private FirmaNeuBearbModel firmaNeuBearbModel;

	// Model Kontakt
	private KontaktVerwModel kontaktVerwModel;
	private KontaktNeuBearbModel kontaktNeuBearbModel;

	// Controler Allgemein
	private Controler controler;

	// Datenbank
	private FirmenVerwDB firmenVerwDB;
	private KontaktVerwDB kontaktVerwDB;

	/**
	 * Konstruktor
	 */
	public Main() {

		// Logger
		DOMConfigurator.configureAndWatch("log4j.xml", 60000);
		logger.info("Program gestartet");

		// Datenbanken
		firmenVerwDB = new FirmenVerwDB();
		kontaktVerwDB = new KontaktVerwDB();

		// Model
		model = new Model();

		// Model Firmen
		firmenVerwModel = new FirmenVerwModel(firmenVerwDB);
		firmaNeuBearbModel = new FirmaNeuBearbModel(firmenVerwDB);

		// Model Kontakt
		kontaktVerwModel = new KontaktVerwModel(kontaktVerwDB);
		kontaktNeuBearbModel = new KontaktNeuBearbModel(kontaktVerwDB);

		// Controler Allgemein
		controler = new Controler(model, firmenVerwModel, firmaNeuBearbModel, kontaktVerwModel, kontaktNeuBearbModel);

		hauptfenster_fx = new Hauptfenster(model, controler);

		// Fenster Firma
		winFirmenVerw = new FirmenVerw(controler, model, firmenVerwModel);
		winNeueFirma = new FirmaNeuBearb(model, controler, firmaNeuBearbModel, firmenVerwModel);

		// Fenster Kontakt
		winKontaktVerw = new KontaktVerw(controler, model, kontaktVerwModel);
		winkontaktNeuBearb = new KontaktNeuBearb(model, controler, kontaktNeuBearbModel, kontaktVerwDB);
	}

	/**
	 * Main Task
	 * 
	 * @param args
	 */
	public static void main(String[] args) {
		launch(args);
	}

	@Override
	public void start(Stage stage) throws Exception {
		stage.setTitle("Stundenverwaltung");

		Group root = new Group();

		scene = new Scene(root, 300, 200, Color.LIGHTGREY);

		hauptfenster_fx.prefWidthProperty().bind(stage.widthProperty());
		root.getChildren().add(hauptfenster_fx);

		stage.setScene(scene);

		// Fenster schliessen
		stage.setOnCloseRequest(new EventHandler<WindowEvent>() {

			@Override
			public void handle(WindowEvent arg0) {
				System.exit(0);

			}
		});

		stage.show();

	}

}
